unit compilar ;
{ Unidad compilar.
  Esta unidad contiene las funciones y procedimientos para compilar un
  proyecto.

  Copyright (C) 2011 Jorge Turiel jorgeturiel@gmail.com

  This source is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free
  Software Foundation; either version 2 of the License, or (at your option)
  any later version.

  This code is distributed in the hope that it will be useful, but WITHOUT ANY
  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
  details.

  A copy of the GNU General Public License is available on the World Wide Web
  at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
  to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  MA 02111-1307, USA.
}
{$mode objfpc}{$H+}

interface

uses
  Classes , SysUtils,uSolucion,FileUtil,Dialogs;
{ Este error, se dispara cuando uno de los ficheros no se encuentra. Esta excepción
 es lanzada en el procedimiento Compilar}
Type ErrorCopiando = Class (Exception);
{ Este procedimiento se encarga de compilar un proyecto
 Parámetros:
             Proyecto : Tipo TProyecto; Contiene el proyecto a compilar.

  Descripción:
  Primero localiza los ficheros, que contiene el proyecto pasado como parámetro.Si
  no encuentra un fichero eleva un excepción de tipo ErrorCopiando

}

Procedure CompilarProyecto (Proyecto : TProyecto);
implementation
Uses uUtiles,uComun,uEditor;
procedure CompilarProyecto (Proyecto :TProyecto );
var
  I :Integer ;
  Fichero :TFichero ;
  Destino :String ;
  lsFichero: TStringList;
  ID: Integer;
begin

  Try
  {Primero, copiar fichero los ficheros al directorio temporal }
  BorrarDirectorioLleno (DirTemp);
  //Recorrer el proyecto, si el fichero es compilable, comprobar que existe
  For I := 0 To Proyecto.Contar -1 do
  Begin
     Fichero := Proyecto.Ficheros[I];
     IF Fichero.Compilar Then
     Begin
       //Buscar si el fichero está abierto en un pestaña
       If Fichero.idTab <> -1 Then
       Begin
         //El fichero está abierto en una pestaña
           lsFichero := TStringList.Create;
           ID := Fichero.idTab;
           lsFichero := frEditor.ContenidoTab(ID);
           lsFichero.SaveToFile(dirTemp+Fichero.Nombre);
       end
       ELSE
       Begin
          //Cargar fichero
          lsFichero := TStringList.Create;
          lsFichero.LoadFromFile(dirTemp+Fichero.Nombre);

       end;
      end;
  end;
  Except On e : Exception do
    ShowMessage (e.Message);
  end;
end;

end.

